﻿using System;
using System.Text.RegularExpressions;
using DimensionsHelper.Common.Table;

namespace DimensionsHelper.Common.Contracts.Table;

public interface ICell
{
    /// <summary>
    ///     当前单元格内容是否是空白，默认是空白。
    /// </summary>
    bool IsEmpty { get; }

    /// <summary>
    ///     当前单元格文本格式内容的字符长度。
    /// </summary>
    int Length { get; }

    /// <summary>
    ///     当前单元格所在的行。
    /// </summary>
    ILine Line { get; }

    /// <summary>
    ///     当前单元格在所在行中的索引。
    /// </summary>
    int Index { get; }

    /// <summary>
    ///     当前单元格的文本内容。
    /// </summary>
    string Text { get; }

    /// <summary>
    ///     当前单元格的值，允许存放多种类型的值。
    /// </summary>
    object Value { get; set; }

    /// <summary>
    ///     当单元格内容发生变化时，触发的事件。当
    /// </summary>
    event EventHandler<CellValueChangedArgs> ValueChanged;

    /// <summary>
    ///     获取指定索引的文本字符，此方法可能抛出索引越限的错误。
    /// </summary>
    /// <param name="charIndex">指定字符位置的索引，应当大于等于0并小于<see cref="Length" /></param>
    /// <returns></returns>
    char CharAt(int charIndex);

    /// <summary>
    ///     判定当前单元格文本内容是否符合指定的正则表达式。
    /// </summary>
    /// <param name="regex"></param>
    /// <returns></returns>
    bool IsMatch(Regex regex);

    /// <summary>
    ///     判定当前单元格文本内容是否符合指定正则表达式。
    /// </summary>
    /// <param name="pattern"></param>
    /// <returns></returns>
    bool IsMatch(string pattern);

    /// <summary>
    ///     判定当前单元格文本内容是否符合指定的断言回调函数。
    /// </summary>
    /// <param name="predicate"></param>
    /// <returns></returns>
    bool IsMatch(Func<string, bool> predicate);
}